import type { RouteRecordStringComponent } from '@vben/types';

/**
 * 获取用户所有菜单
 * 如果后端接口返回错误，则返回空数组，不显示任何菜单
 */
// 添加全局方法，方便在控制台中调用
(window as any).testMenuApi = async function() {
  console.log('手动测试菜单API...');
  try {
    const menus = await getAllMenusApi();
    console.log('菜单数据:', menus);
    return menus;
  } catch (error) {
    console.error('测试菜单API失败:', error);
    return null;
  }
};

// 添加直接使用fetch的测试方法
(window as any).testFetchMenuApi = async function() {
  console.log('使用fetch直接测试菜单API...');
  try {
    const url = 'http://localhost:8080/api/v1/auth/menu/list';
    console.log('请求URL:', url);
    
    // 从localStorage获取token
    const token = localStorage.getItem('accessToken') || '';
    console.log('使用token:', token);
    
    const response = await fetch(url, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${token}`
      },
      credentials: 'include'
    });
    
    if (!response.ok) {
      const errorText = await response.text();
      console.error('请求失败:', response.status, response.statusText, errorText);
      return null;
    }
    
    const data = await response.json();
    console.log('响应数据:', data);
    return data;
  } catch (error) {
    console.error('fetch测试失败:', error);
    return null;
  }
};

export async function getAllMenusApi() {
  console.log('开始调用菜单接口: /auth/menu/list');
  try {
    // 直接发送请求到后端，不使用requestClient封装
    // 使用完整的URL，确保能够正确访问后端
    const url = 'http://localhost:8080/api/v1/auth/menu/list';
    console.log('使用完整的URL:', url);
    
    console.log('直接发送请求到:', url);
    
    // 获取当前的认证令牌
    let token = null;
    
    try {
      // 尝试从pinia中获取token
      const accessStore = (window as any).$pinia?.state?.value?.accessStore;
      token = accessStore?.accessToken;
      
      // 如果pinia中没有token，尝试从localStorage获取
      if (!token) {
        const accessToken = localStorage.getItem('accessToken');
        if (accessToken) {
          token = accessToken;
          console.log('从localStorage获取到token:', token);
        }
      }
    } catch (err) {
      console.error('获取token失败:', err);
    }
    
    if (!token) {
      console.error('未找到有效的认证令牌，无法请求菜单数据');
      return [];
    }
    
    console.log('使用token:', token);
    
    // 准备请求头
    const headers: Record<string, string> = {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${token}`
    };
    
    // 发送请求
    console.log('发送请求获取菜单数据，使用的令牌:', token);
    const response = await fetch(url, {
      method: 'GET',
      headers,
      credentials: 'include'
    });
    
    if (!response.ok) {
      console.error('菜单请求失败:', response.status, response.statusText);
      const errorText = await response.text();
      console.error('错误详情:', errorText);
      return [];
    }
    
    const responseData = await response.json();
    console.log('菜单接口原始响应:', responseData);
    
    // 处理Go后端的响应格式
    let menuData = responseData;
    if (responseData.code === 200 && responseData.data) {
      menuData = responseData.data;
    } else if (typeof responseData.data !== 'undefined') {
      menuData = responseData.data;
    }
    
    console.log('处理后的菜单数据:', menuData);
    
    // 检查菜单数据的格式
    if (!menuData) {
      console.warn('菜单数据为空');
      return [];
    }
    
    if (!Array.isArray(menuData)) {
      console.warn('菜单数据不是数组格式:', typeof menuData);
      // 尝试将对象转换为数组
      if (typeof menuData === 'object') {
        const menuArray = Object.values(menuData);
        console.log('尝试将对象转换为数组:', menuArray);
        if (menuArray.length > 0) {
          return menuArray;
        }
      }
      return [];
    }
    
    if (menuData.length === 0) {
      console.warn('菜单数组为空');
      return [];
    }
    
    console.log('成功获取菜单数据，返回数组长度:', menuData.length);
    return menuData;
  } catch (error) {
    console.error('获取菜单数据失败:', error);
    // 如果API调用失败，返回空数组
    return [];
  }
}

